﻿using QLBH;
using QLBH.DTO;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace QLBH.DATA
{
    public class NguoiDungData
    {
        private static QLBHEntities db = new QLBHEntities();
        public string Error { set; get; }

        public NGUOI_DUNG DangNhap(string ten_dang_nhap, string matkhau)
        {
            NGUOI_DUNG n = db.NGUOI_DUNG.Where(p => p.TEN_DANG_NHAP.CompareTo(ten_dang_nhap)==0 && p.MAT_KHAU.CompareTo(matkhau)==0).FirstOrDefault();
            return n;
        }

        private string TaoMaNguoiDung()
        {
            string result ="";
            if (db.NGUOI_DUNG.ToList().Count <= 0)
            {
                result = "0001";
            }
            else
            {
                int maxId = 0;

                foreach (var item in db.NGUOI_DUNG.ToList())
                {
                    if (maxId<int.Parse(item.MA_NGUOI_DUNG.Substring(2)))
                    {
                        maxId = int.Parse(item.MA_NGUOI_DUNG.Substring(2));
                    }
                }
                switch (maxId.ToString().Length)
                {
                    case 1:
                        result = "000" + (maxId + 1);
                        break;


                    case 2:
                        result = "00" + (maxId + 1);
                        break;


                    case 3:
                        result = "0" + (maxId + 1);
                        break;


                    case 4:
                        result = ""+(maxId + 1);
                        break;
                    default:
                        break;
                }
            }
            return "ND"+result;
        }

        bool KiemTraTenDangNhap(string ten_dang_nhap)
        {
            bool exists = db.NGUOI_DUNG.Any(p => p.TEN_DANG_NHAP == ten_dang_nhap);
            return exists;
        }

        public bool ThemMoiNguoiDung(NGUOIDUNGPARAM nguoi_dung)
        {
            try
            {
                NGUOI_DUNG nd = new NGUOI_DUNG();
                nd.MA_NGUOI_DUNG = nguoi_dung.MA_NGUOI_DUNG;
                nd.TEN_DANG_NHAP = nguoi_dung.TEN_DANG_NHAP;
                nd.MA_NHAN_VIEN = nguoi_dung.MA_NHAN_VIEN;
                nd.MAT_KHAU = nguoi_dung.MAT_KHAU;
                nd.DA_XOA = false;
                if (KiemTraTenDangNhap(nguoi_dung.TEN_DANG_NHAP))
                {
                    Error = "Tên đăng nhập đã tồn tại";
                    return false;
                }
                if (nd.MA_NGUOI_DUNG.Trim().Length<=0)
                {
                    nd.MA_NGUOI_DUNG = TaoMaNguoiDung();
                }
               
                db.NGUOI_DUNG.Add(nd);
                db.SaveChanges();
                return true;
            }
            catch (Exception ex)
            {
                Error = ex.Message;
                return false;
            }
        }

        public bool CapNhatNguoiDung(NGUOIDUNGPARAM nguoi_dung)
        {
            try
            {
                NGUOI_DUNG nd = new NGUOI_DUNG();
                nd.MA_NGUOI_DUNG = nguoi_dung.MA_NGUOI_DUNG;
                nd.TEN_DANG_NHAP = nguoi_dung.TEN_DANG_NHAP;
                nd.MA_NHAN_VIEN = nguoi_dung.MA_NHAN_VIEN;
                nd.DA_XOA = false;

                NGUOI_DUNG n = db.NGUOI_DUNG.Where(p => p.MA_NGUOI_DUNG == nguoi_dung.MA_NGUOI_DUNG).FirstOrDefault();
                if (n==null)
                {
                    Error = "Người dùng không tồn tại";
                    return false;
                }

                n.MA_NHAN_VIEN = nd.MA_NHAN_VIEN;
                n.TEN_DANG_NHAP = nd.TEN_DANG_NHAP;
                db.SaveChanges();
                return true;
            }
            catch (Exception ex)
            {
                Error = ex.Message +"--"+ ex.InnerException.Message;
                return false;
            }
        }


        public bool XoaNguoiDung(string[] ma_nguoi_dung)
        {
            try
            {
                for (int i = 0; i < ma_nguoi_dung.Length; i++)
                {
                    string m = ma_nguoi_dung[i];
                    NGUOI_DUNG n = db.NGUOI_DUNG.Where(p => p.MA_NGUOI_DUNG == m).FirstOrDefault();
                    if (n == null)
                    {
                        Error = "Người dùng không tồn tại";
                        return false;
                    }
                    n.DA_XOA = true;
                    db.SaveChanges();
                }
               
              
                return true;
            }
            catch (Exception ex)
            {
                Error = ex.Message + "--" + ex.InnerException.Message;
                return false;
            }
        }

        public List<NGUOI_DUNG> TimNguoiDungTheoTen(string ten_dang_nhap, int tong_so_dong)
        {

            List<NGUOI_DUNG> list = new List<NGUOI_DUNG>();
            if (ten_dang_nhap=="")
            {
                list = db.NGUOI_DUNG.Where(p => p.DA_XOA == false).ToList().Skip(tong_so_dong).Take(20).ToList().Select(p => new NGUOI_DUNG()
                    {
                        DA_XOA = p.DA_XOA,
                        MA_NGUOI_DUNG = p.MA_NGUOI_DUNG,
                        MA_NHAN_VIEN = p.MA_NHAN_VIEN,
                        MAT_KHAU =p.MAT_KHAU,
                        TEN_DANG_NHAP = p.TEN_DANG_NHAP
                    }).ToList();
            }
            else
                list = db.NGUOI_DUNG.Where(p => p.DA_XOA == false && p.TEN_DANG_NHAP.Contains(ten_dang_nhap)).ToList().Skip(tong_so_dong).Take(20).ToList().Select(p => new NGUOI_DUNG()
                {
                    DA_XOA = p.DA_XOA,
                    MA_NGUOI_DUNG = p.MA_NGUOI_DUNG,
                    MA_NHAN_VIEN = p.MA_NHAN_VIEN,
                    MAT_KHAU = p.MAT_KHAU,
                    TEN_DANG_NHAP = p.TEN_DANG_NHAP
                }).ToList(); ;
            return list;
        }


        public NGUOI_DUNG LayNguoiDungTheoTenDangNhap(string ma_nguoi_dung)
        {
            return db.NGUOI_DUNG.Where(p => p.DA_XOA == false && p.MA_NGUOI_DUNG == ma_nguoi_dung).FirstOrDefault();
        }


        public bool DoiMatKhau(string ten_dang_nhap, string matkhaucu, string matkhaumoi)
        {
            try
            {
                NGUOI_DUNG n = db.NGUOI_DUNG.Where(p => p.TEN_DANG_NHAP.CompareTo(ten_dang_nhap) == 0 && p.MAT_KHAU.CompareTo(matkhaucu) == 0).FirstOrDefault();
                if (n == null)
                {
                    Error = "Tài khoản hoặc mật khẩu không đúng";
                    return false;
                }
                else
                {
                    n.MAT_KHAU = matkhaumoi;
                    db.SaveChanges();
                    return true;
                }
            }
            catch (Exception ex)
            {
                Error = ex.Message;
                return false;
            }

        }

    }
}